iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
Software Development

Spring boot 從零到寫出ChatGPT系列 第 14

Spring boot 從零開始 (14) - Lombok讓你的程式碼變得更簡潔

  • 分享至 

  • xImage
  •  

相信大家都在寫Java的時候很常遇到需要自己寫一堆Getter和Setter方法的時候吧?
Lombok的出現就是解救我們大家可以避免寫了很多冗長的程式碼,只要學會使用Lombok的annotation使用時機,就可以節省很多開發時間跟簡化你的程式碼。

環境安裝

pom.xml新增以下設定,目前已經版本更新到1.18.34

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.34</version>
			<scope>provided</scope>
		</dependency>

安裝完畢之後就可以使用了喔!!

Lombok 常用語法

1. @Getter @Setter

  • @Getter 註解用於自動生成字段的 getter 方法
  • @Setter 註解用於自動生成字段的 setter 方法
    如果我們還沒有使用Lombok之前,我們需要宣告Getter和Setter的話,程式碼如下
@Entity
@Table(name = "book")
public class Book {
    @Id
    @GeneratedValue
    @Column(name = "BOOK_ID")
    private Integer bookId;
    private String name;
    @Column
    private String author;

    public Integer getBookId() {
        return bookId;
    }

    public void setBookId(Integer bookId) {
        this.bookId = bookId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}

但我們如果只用了Lombok annotation之後,我們的程式碼只需要簡化如下

@Getter
@Setter
@Entity
@Table(name = "book")
public class Book {
    @Id
    @GeneratedValue
    @Column(name = "BOOK_ID")
    private Integer bookId;
    private String name;
    @Column
    private String author;
}

2. @ToString

  • toString() 預設印出所有非static的欄位。
@ToString
@Entity
@Table(name = "book")
public class Book {
    @Id
    @GeneratedValue
    @Column(name = "BOOK_ID")
    private Integer bookId;
    private String name;
    @Column
    private String author;
}

3. @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor

  • @NoArgsConstructor 生成一個無參數的建構函數。
  • @RequiredArgsConstructor 生成一個包含所有被 final 修飾的字段的建構函數。
  • @AllArgsConstructor 註解生成一個包含所有字段的建構函數。
    這邊提醒大家,如果要使用@AllArgsConstructor一定要記得搭配使用 @NoArgsConstructor才不會發生不預期的錯誤喔!
    使用範例 👇
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor
@Entity
@Table(name = "book")
public class Book {
    @Id
    @GeneratedValue
    @Column(name = "BOOK_ID")
    private Integer bookId;
    private String name;
    @Column
    private String author;
    
    // 
    Book book1 = new Book(1, "Hello World");
    Book book2 = new Book(2, "Libary", "Alice");
}

4. @Builder

  • @Builder可用於自動為我們的類別產生建構器。
    使用範例 👇
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Builder
@Entity
@Table(name = "book")
public class Book {
    @Id
    @GeneratedValue
    @Column(name = "BOOK_ID")
    private Integer bookId;
    private String name;
    @Column
    private String author;

// 
    Book book = Book.builder()
            .bookId(1)
            .name("Iron")
            .author("Winnie")
            .build();
}

5. @Data

@Data就是萬用大全,等於同時標註了:

  • @Getter
  • @Setter
  • @ToString
  • @EqualsAndHashCode
  • @RequiredArgsConstructor

因為沒有包含@NoArgsConstructor,所以也要記得加上喔!!!!

5. @Slf4j

@Slf4j真的是個超好用的註解,平常沒有他的話,我們都需要自己在service自己宣告logger.class,透過註解我們可以直接生成**Slf4j **的來繼續log

@Service
@Slf4j
public class IronService {
...

}

透過剛剛的介紹,有沒有覺得Lombok真的的發明真的是拯救大家簡化了很多程式碼,真的建議一定要添加喔!


上一篇
Spring boot 從零開始 (13) - 一起完成一個CRUD的Case吧 !
下一篇
Spring boot 從零開始 (15) - Health Check & 監控工具 Actuator
系列文
Spring boot 從零到寫出ChatGPT30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言